From d254785797fbfb4083e99ff9e6f79af3fede0349 Mon Sep 17 00:00:00 2001 From: robertl Date: Sun, 6 Jan 2008 23:16:13 +0000 Subject: [PATCH] Add ability to read/write cache availability and archived status in CSV. --- csv_util.c | 36 +++- defs.h | 12 +- gpx.c | 14 +- kml.c | 4 +- xcsv_tokens.gperf | 326 ++++++++++++++++++------------------- xcsv_tokens.in | 2 + xmldoc/chapters/styles.xml | 26 +++ 7 files changed, 240 insertions(+), 180 deletions(-) diff --git a/csv_util.c b/csv_util.c index 437b8d172..14c1e5040 100644 --- a/csv_util.c +++ b/csv_util.c @@ -66,6 +66,8 @@ typedef enum { XT_GEOCACHE_PLACER, XT_GEOCACHE_TERR, XT_GEOCACHE_TYPE, + XT_GEOCACHE_ISAVAILABLE, + XT_GEOCACHE_ISARCHIVED, XT_GMT_TIME, XT_GPS_FIX, XT_GPS_HDOP, @@ -1060,7 +1062,23 @@ xcsv_parse_val(const char *s, waypoint *wpt, const field_map_t *fmp) case XT_GEOCACHE_PLACER: wpt->gc_data.placer = csv_stringtrim(s, "", 0); break; - + case XT_GEOCACHE_ISAVAILABLE: + if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "False") == 0 ) + wpt->gc_data.is_available = status_false; + else if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "True") == 0 ) + wpt->gc_data.is_available = status_true; + else + wpt->gc_data.is_available = status_unknown; + break; + case XT_GEOCACHE_ISARCHIVED: + if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "False") == 0 ) + wpt->gc_data.is_archived = status_false; + else if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "True") == 0 ) + wpt->gc_data.is_archived = status_true; + else + wpt->gc_data.is_archived = status_unknown; + break; + /* GPS STUFF *******************************************************/ case XT_GPS_HDOP: wpt->hdop = atof(s); @@ -1620,6 +1638,22 @@ xcsv_waypt_pr(const waypoint *wpt) writebuff(buff, fmp->printfc, NONULL(wpt->gc_data.placer)); field_is_unknown = !wpt->gc_data.placer; break; + case XT_GEOCACHE_ISAVAILABLE: + if ( wpt->gc_data.is_available == status_false ) + writebuff(buff, fmp->printfc, "False"); + else if ( wpt->gc_data.is_available == status_true ) + writebuff(buff, fmp->printfc, "True"); + else + writebuff(buff, fmp->printfc, "Unknown"); + break; + case XT_GEOCACHE_ISARCHIVED: + if ( wpt->gc_data.is_archived == status_false ) + writebuff(buff, fmp->printfc, "False"); + else if ( wpt->gc_data.is_archived == status_true ) + writebuff(buff, fmp->printfc, "True"); + else + writebuff(buff, fmp->printfc, "Unknown"); + break; /* Tracks and Routes ***********************************************/ case XT_TRACK_NAME: if (csv_track) writebuff(buff, fmp->printfc, NONULL(csv_track->rte_name)); diff --git a/defs.h b/defs.h index 49850aa73..3ea48c5ed 100644 --- a/defs.h +++ b/defs.h @@ -138,6 +138,12 @@ typedef enum { fix_pps } fix_type; +typedef enum { + status_unknown=0, + status_true, + status_false +} status_type; + /* * Define globally on which kind of data gpsbabel is working. * Important for "file types" that are essentially a communication @@ -234,15 +240,15 @@ typedef struct { geocache_container container:4; unsigned int diff:6; /* (multiplied by ten internally) */ unsigned int terr:6; /* (likewise) */ - unsigned int is_archived:1; - unsigned int is_available:1; + status_type is_archived:2; + status_type is_available:2; time_t exported; time_t last_found; char *placer; /* Placer name */ int placer_id; /* Placer id */ char *hint; /* all these UTF8, XML entities removed, May be not HTML. */ utf_string desc_short; - utf_string desc_long; + utf_string desc_long; } geocache_data ; typedef struct xml_tag { diff --git a/gpx.c b/gpx.c index a02dddb22..7e33d2871 100644 --- a/gpx.c +++ b/gpx.c @@ -486,13 +486,19 @@ tag_gs_cache(const char **attrv) if (strcmp(avp[0], "id") == 0) { wpt_tmp->gc_data.id = atoi(avp[1]); } else if (strcmp(avp[0], "available") == 0) { - if (strcmp(avp[1], "True") == 0) { - wpt_tmp->gc_data.is_available = 1; + if (case_ignore_strcmp(avp[1], "True") == 0) { + wpt_tmp->gc_data.is_available = status_true; } + else if (case_ignore_strcmp(avp[1], "False") == 0) { + wpt_tmp->gc_data.is_available = status_false; + } } else if (strcmp(avp[0], "archived") == 0) { - if (strcmp(avp[1], "True") == 0) { - wpt_tmp->gc_data.is_archived = 1; + if (case_ignore_strcmp(avp[1], "True") == 0) { + wpt_tmp->gc_data.is_archived = status_true; } + else if (case_ignore_strcmp(avp[1], "False") == 0) { + wpt_tmp->gc_data.is_archived = status_false; + } } } } diff --git a/kml.c b/kml.c index aa8a79004..5ac81d8f0 100644 --- a/kml.c +++ b/kml.c @@ -820,9 +820,9 @@ static void kml_geocache_pr(const waypoint *waypointp) // Highlight any issues with the cache, such as temp unavail // or archived. kml_write_xml(0, ""); - if (waypointp->gc_data.is_archived == 1) { + if (waypointp->gc_data.is_archived == status_true) { kml_write_xml(0, "<font color=\"red\">This cache has been archived.</font>
\n"); - } else if (waypointp->gc_data.is_available == 0) { + } else if (waypointp->gc_data.is_available == status_false) { kml_write_xml(0, "<font color=\"red\">This cache is temporarily unavailable.</font>
\n"); } kml_write_xml(0, "
\n"); diff --git a/xcsv_tokens.gperf b/xcsv_tokens.gperf index 3d5953fb5..e0df1bec9 100644 --- a/xcsv_tokens.gperf +++ b/xcsv_tokens.gperf @@ -1,5 +1,5 @@ -/* C code produced by gperf version 3.0.2 */ -/* Command-line: gperf -t --output-file=xcsv_tokens.gperf xcsv_tokens.in */ +/* ANSI-C code produced by gperf version 3.0.1 */ +/* Command-line: gperf -L ANSI-C -D -t xcsv_tokens.in */ /* Computed positions: -k'2,4-5,12' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -26,18 +26,18 @@ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ -error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." #endif #line 1 "xcsv_tokens.in" struct xt_mapping {char *name; int xt_token; }; -#define TOTAL_KEYWORDS 60 +#define TOTAL_KEYWORDS 62 #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 21 -#define MIN_HASH_VALUE 7 -#define MAX_HASH_VALUE 148 -/* maximum key range = 142, duplicates = 0 */ +#define MIN_HASH_VALUE 10 +#define MAX_HASH_VALUE 113 +/* maximum key range = 104, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -47,38 +47,36 @@ inline #endif #endif static unsigned int -hash (str, len) - register const char *str; - register unsigned int len; +hash (register const char *str, register unsigned int len) { static unsigned char asso_values[] = { - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 0, 149, 0, 0, 5, - 50, 20, 10, 35, 149, 20, 30, 50, 0, 5, - 60, 149, 45, 55, 5, 149, 5, 149, 5, 5, - 149, 149, 149, 149, 149, 20, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149 + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 25, 114, 0, 0, 0, + 50, 15, 5, 10, 114, 50, 25, 45, 5, 0, + 40, 114, 20, 5, 5, 114, 30, 114, 10, 5, + 114, 114, 114, 114, 114, 15, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114 }; register int hval = len; @@ -111,164 +109,147 @@ hash (str, len) __inline #endif struct xt_mapping * -in_word_set (str, len) - register const char *str; - register unsigned int len; +in_word_set (register const char *str, register unsigned int len) { static struct xt_mapping wordlist[] = { - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 5 "xcsv_tokens.in" - {"ANYNAME", XT_ANYNAME}, - {""}, {""}, {""}, {""}, +#line 50 "xcsv_tokens.in" + {"NOTES", XT_NOTES}, +#line 58 "xcsv_tokens.in" + {"ROUTE_NAME", XT_ROUTE_NAME}, +#line 7 "xcsv_tokens.in" + {"CONSTANT", XT_CONSTANT}, +#line 30 "xcsv_tokens.in" + {"INDEX", XT_INDEX}, +#line 44 "xcsv_tokens.in" + {"LON_DIR", XT_LON_DIR}, +#line 62 "xcsv_tokens.in" + {"URL", XT_URL}, +#line 60 "xcsv_tokens.in" + {"TIMET_TIME", XT_TIMET_TIME}, +#line 42 "xcsv_tokens.in" + {"LON_DECIMAL", XT_LON_DECIMAL}, +#line 48 "xcsv_tokens.in" + {"LON_NMEA", XT_LON_NMEA}, +#line 43 "xcsv_tokens.in" + {"LON_DECIMALDIR", XT_LON_DECIMALDIR}, +#line 28 "xcsv_tokens.in" + {"ICON_DESCR", XT_ICON_DESCR}, +#line 8 "xcsv_tokens.in" + {"DESCRIPTION", XT_DESCRIPTION}, +#line 31 "xcsv_tokens.in" + {"ISO_TIME", XT_ISO_TIME}, +#line 25 "xcsv_tokens.in" + {"HEART_RATE", XT_HEART_RATE}, +#line 32 "xcsv_tokens.in" + {"ISO_TIME_MS", XT_ISO_TIME_MS}, #line 6 "xcsv_tokens.in" {"CADENCE", XT_CADENCE}, - {""}, {""}, -#line 28 "xcsv_tokens.in" - {"INDEX", XT_INDEX}, - {""}, {""}, +#line 46 "xcsv_tokens.in" + {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE}, +#line 59 "xcsv_tokens.in" + {"SHORTNAME", XT_SHORTNAME}, +#line 29 "xcsv_tokens.in" + {"IGNORE", XT_IGNORE}, +#line 5 "xcsv_tokens.in" + {"ANYNAME", XT_ANYNAME}, #line 12 "xcsv_tokens.in" {"GEOCACHE_HINT", XT_GEOCACHE_HINT}, - {""}, -#line 14 "xcsv_tokens.in" - {"GEOCACHE_PLACER", XT_GEOCACHE_PLACER}, - {""}, {""}, +#line 9 "xcsv_tokens.in" + {"EXCEL_TIME", XT_EXCEL_TIME}, +#line 36 "xcsv_tokens.in" + {"LAT_DIR", XT_LAT_DIR}, #line 10 "xcsv_tokens.in" {"GEOCACHE_CONTAINER", XT_GEOCACHE_CONTAINER}, - {""}, -#line 56 "xcsv_tokens.in" - {"ROUTE_NAME", XT_ROUTE_NAME}, - {""}, +#line 13 "xcsv_tokens.in" + {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND}, +#line 49 "xcsv_tokens.in" + {"MAP_EN_BNG", XT_MAP_EN_BNG}, #line 34 "xcsv_tokens.in" - {"LAT_DIR", XT_LAT_DIR}, -#line 38 "xcsv_tokens.in" - {"LAT_NMEA", XT_LAT_NMEA}, - {""}, -#line 26 "xcsv_tokens.in" - {"ICON_DESCR", XT_ICON_DESCR}, -#line 32 "xcsv_tokens.in" {"LAT_DECIMAL", XT_LAT_DECIMAL}, -#line 42 "xcsv_tokens.in" - {"LON_DIR", XT_LON_DIR}, -#line 46 "xcsv_tokens.in" - {"LON_NMEA", XT_LON_NMEA}, -#line 33 "xcsv_tokens.in" - {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR}, #line 47 "xcsv_tokens.in" - {"MAP_EN_BNG", XT_MAP_EN_BNG}, + {"LON_INT32DEG", XT_LON_INT32DEG}, #line 40 "xcsv_tokens.in" - {"LON_DECIMAL", XT_LON_DECIMAL}, - {""}, {""}, -#line 41 "xcsv_tokens.in" - {"LON_DECIMALDIR", XT_LON_DECIMALDIR}, -#line 52 "xcsv_tokens.in" + {"LAT_NMEA", XT_LAT_NMEA}, +#line 35 "xcsv_tokens.in" + {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR}, +#line 54 "xcsv_tokens.in" {"PATH_SPEED", XT_PATH_SPEED}, -#line 49 "xcsv_tokens.in" +#line 51 "xcsv_tokens.in" {"PATH_COURSE", XT_PATH_COURSE}, - {""}, {""}, {""}, -#line 39 "xcsv_tokens.in" +#line 15 "xcsv_tokens.in" + {"GEOCACHE_TERR", XT_GEOCACHE_TERR}, +#line 41 "xcsv_tokens.in" {"LOCAL_TIME", XT_LOCAL_TIME}, -#line 50 "xcsv_tokens.in" +#line 52 "xcsv_tokens.in" {"PATH_DISTANCE_KM", XT_PATH_DISTANCE_KM}, - {""}, -#line 60 "xcsv_tokens.in" - {"URL", XT_URL}, -#line 51 "xcsv_tokens.in" - {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES}, -#line 9 "xcsv_tokens.in" - {"EXCEL_TIME", XT_EXCEL_TIME}, - {""}, {""}, -#line 36 "xcsv_tokens.in" +#line 38 "xcsv_tokens.in" {"LAT_HUMAN_READABLE", XT_LAT_HUMAN_READABLE}, - {""}, -#line 58 "xcsv_tokens.in" - {"TIMET_TIME", XT_TIMET_TIME}, -#line 31 "xcsv_tokens.in" - {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE}, - {""}, -#line 44 "xcsv_tokens.in" - {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE}, - {""}, {""}, -#line 8 "xcsv_tokens.in" - {"DESCRIPTION", XT_DESCRIPTION}, - {""}, -#line 15 "xcsv_tokens.in" - {"GEOCACHE_TERR", XT_GEOCACHE_TERR}, -#line 54 "xcsv_tokens.in" - {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH}, -#line 23 "xcsv_tokens.in" - {"HEART_RATE", XT_HEART_RATE}, #line 53 "xcsv_tokens.in" - {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS}, - {""}, -#line 11 "xcsv_tokens.in" - {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF}, -#line 57 "xcsv_tokens.in" - {"SHORTNAME", XT_SHORTNAME}, -#line 48 "xcsv_tokens.in" - {"NOTES", XT_NOTES}, - {""}, {""}, -#line 7 "xcsv_tokens.in" - {"CONSTANT", XT_CONSTANT}, - {""}, -#line 59 "xcsv_tokens.in" - {"TRACK_NAME", XT_TRACK_NAME}, -#line 27 "xcsv_tokens.in" - {"IGNORE", XT_IGNORE}, - {""}, -#line 16 "xcsv_tokens.in" - {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE}, -#line 13 "xcsv_tokens.in" - {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND}, - {""}, {""}, {""}, + {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES}, +#line 14 "xcsv_tokens.in" + {"GEOCACHE_PLACER", XT_GEOCACHE_PLACER}, +#line 23 "xcsv_tokens.in" + {"GPS_SAT", XT_GPS_SAT}, +#line 21 "xcsv_tokens.in" + {"GPS_HDOP", XT_GPS_HDOP}, +#line 18 "xcsv_tokens.in" + {"GEOCACHE_ISARCHIVED", XT_GEOCACHE_ISARCHIVED}, #line 17 "xcsv_tokens.in" + {"GEOCACHE_ISAVAILABLE", XT_GEOCACHE_ISAVAILABLE}, +#line 19 "xcsv_tokens.in" {"GMT_TIME", XT_GMT_TIME}, -#line 35 "xcsv_tokens.in" - {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL}, - {""}, {""}, -#line 37 "xcsv_tokens.in" - {"LAT_INT32DEG", XT_LAT_INT32DEG}, -#line 29 "xcsv_tokens.in" - {"ISO_TIME", XT_ISO_TIME}, -#line 43 "xcsv_tokens.in" - {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL}, - {""}, -#line 30 "xcsv_tokens.in" - {"ISO_TIME_MS", XT_ISO_TIME_MS}, #line 45 "xcsv_tokens.in" - {"LON_INT32DEG", XT_LON_INT32DEG}, -#line 22 "xcsv_tokens.in" - {"GPS_VDOP", XT_GPS_VDOP}, -#line 55 "xcsv_tokens.in" - {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH}, - {""}, {""}, {""}, -#line 19 "xcsv_tokens.in" - {"GPS_HDOP", XT_GPS_HDOP}, -#line 24 "xcsv_tokens.in" + {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL}, +#line 33 "xcsv_tokens.in" + {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE}, +#line 39 "xcsv_tokens.in" + {"LAT_INT32DEG", XT_LAT_INT32DEG}, +#line 16 "xcsv_tokens.in" + {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE}, +#line 61 "xcsv_tokens.in" + {"TRACK_NAME", XT_TRACK_NAME}, +#line 63 "xcsv_tokens.in" + {"URL_LINK_TEXT", XT_URL_LINK_TEXT}, +#line 26 "xcsv_tokens.in" {"HMSG_TIME", XT_HMSG_TIME}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 3 "xcsv_tokens.in" - {"ALT_FEET", XT_ALT_FEET}, -#line 25 "xcsv_tokens.in" +#line 11 "xcsv_tokens.in" + {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF}, +#line 24 "xcsv_tokens.in" + {"GPS_VDOP", XT_GPS_VDOP}, +#line 27 "xcsv_tokens.in" {"HMSL_TIME", XT_HMSL_TIME}, #line 4 "xcsv_tokens.in" {"ALT_METERS", XT_ALT_METERS}, - {""}, {""}, -#line 61 "xcsv_tokens.in" - {"URL_LINK_TEXT", XT_URL_LINK_TEXT}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 62 "xcsv_tokens.in" - {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 18 "xcsv_tokens.in" - {"GPS_FIX", XT_GPS_FIX}, - {""}, {""}, {""}, {""}, -#line 21 "xcsv_tokens.in" - {"GPS_SAT", XT_GPS_SAT}, - {""}, {""}, {""}, {""}, {""}, +#line 3 "xcsv_tokens.in" + {"ALT_FEET", XT_ALT_FEET}, +#line 37 "xcsv_tokens.in" + {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL}, +#line 22 "xcsv_tokens.in" + {"GPS_PDOP", XT_GPS_PDOP}, +#line 57 "xcsv_tokens.in" + {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH}, +#line 56 "xcsv_tokens.in" + {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH}, +#line 55 "xcsv_tokens.in" + {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS}, #line 20 "xcsv_tokens.in" - {"GPS_PDOP", XT_GPS_PDOP} + {"GPS_FIX", XT_GPS_FIX}, +#line 64 "xcsv_tokens.in" + {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME} + }; + + static signed char lookup[] = + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, 1, -1, -1, 2, -1, 3, -1, 4, 5, -1, 6, 7, -1, + 8, 9, 10, 11, -1, 12, -1, 13, 14, 15, 16, 17, -1, 18, + 19, 20, -1, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, -1, 32, -1, 33, 34, -1, 35, 36, 37, -1, 38, 39, 40, + 41, -1, -1, 42, 43, -1, 44, 45, 46, -1, 47, -1, -1, 48, + 49, -1, -1, -1, 50, -1, -1, -1, -1, 51, 52, 53, -1, -1, + 54, 55, -1, -1, -1, 56, 57, -1, -1, -1, -1, 58, -1, 59, + 60, 61 }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) @@ -277,10 +258,15 @@ in_word_set (str, len) if (key <= MAX_HASH_VALUE && key >= 0) { - register const char *s = wordlist[key].name; + register int index = lookup[key]; + + if (index >= 0) + { + register const char *s = wordlist[index].name; - if (*str == *s && !strcmp (str + 1, s + 1)) - return &wordlist[key]; + if (*str == *s && !strcmp (str + 1, s + 1)) + return &wordlist[index]; + } } } return 0; diff --git a/xcsv_tokens.in b/xcsv_tokens.in index dc98a1692..a80c1f253 100644 --- a/xcsv_tokens.in +++ b/xcsv_tokens.in @@ -14,6 +14,8 @@ GEOCACHE_LAST_FOUND, XT_GEOCACHE_LAST_FOUND GEOCACHE_PLACER, XT_GEOCACHE_PLACER GEOCACHE_TERR, XT_GEOCACHE_TERR GEOCACHE_TYPE, XT_GEOCACHE_TYPE +GEOCACHE_ISAVAILABLE, XT_GEOCACHE_ISAVAILABLE +GEOCACHE_ISARCHIVED, XT_GEOCACHE_ISARCHIVED GMT_TIME, XT_GMT_TIME GPS_FIX, XT_GPS_FIX GPS_HDOP, XT_GPS_HDOP diff --git a/xmldoc/chapters/styles.xml b/xmldoc/chapters/styles.xml index 164a5f01f..123786bc2 100644 --- a/xmldoc/chapters/styles.xml +++ b/xmldoc/chapters/styles.xml @@ -986,6 +986,32 @@ example: +
+GEOCACHE_ISAVAILABLE + + GEOCACHE_ISAVAILABLE is a string containing "True" or "False" + indicating whether a geocache is currently available or not. + + +example: + + GEOCACHE_ISAVAILABLE,"","%s" + +
+ +
+GEOCACHE_ISARCHIVED + + GEOCACHE_ISARCHIVED is a string containing "True" or "False" + indicating whether a geocache has been archived. + + +example: + + GEOCACHE_ISARCHIVED,"","%s" + +
+
GEOCACHE_LAST_FOUND -- 2.30.2